# CHANGELOG for Shopware 5.2.x

This changelog references changes done in Shopware 5.2 patch versions.

# 5.2.27

[View all changes from v5.2.26...v5.2.27](https://github.com/shopware/shopware/compare/v5.2.26...v5.2.27)

* Added config check to disable the `Tell a friend` page if it is disabled via config.
* Fixed id collision in `themes/Backend/ExtJs/backend/base/component/Shopware.ModuleManager.js`
* Added guetzli media optimizer
* Added new event `Shopware_Plugins_HttpCache_ContextCookieValue` to modify HttpCache Context-Cookie.
* Added support for uploading media with ftps in Rest-API
* Added `{$smarty.block.parent}` to `themes/Frontend/Bare/frontend/checkout/confirm_item.tpl`.
* Added new block `frontend_checkout_cart_item_details_essential_features` to `themes/Frontend/Bare/frontend/checkout/confirm_item.tpl`.
* Added new block `frontend_checkout_confirm_product_table_content` around table in `themes/Frontend/Bare/frontend/checkout/confirm.tpl`.
* Individual voucher codes are now searchable in voucher overview

# 5.2.26

[View all changes from v5.2.25...v5.2.26](https://github.com/shopware/shopware/compare/v5.2.25...v5.2.26)

## 5.2.25

[View all changes from v5.2.24...v5.2.25](https://github.com/shopware/shopware/compare/v5.2.24...v5.2.25)

* Added notify event `Shopware_Modules_Basket_AddArticle_Added` in `engine/Shopware/Core/sBasket.php`
* The event `Shopware_Modules_Export_ExportResult_Filter_Fixed` was added and now filters the processed export result. Previously with `Shopware_Modules_Export_ExportResult_Filter`, an instance of `Zend_Db_Statement_Pdo` was supplied, which could not be used to filter the actual result.
* Removed duplicate block and added more precise ones in `themes/Frontend/Bare/frontend/checkout/ajax_cart.tpl`

# 5.2.24

[View all changes from v5.2.23...v5.2.24](https://github.com/shopware/shopware/compare/v5.2.23...v5.2.24)

* Fixed custom datefield format for articles
* Fixed styling of image slider on tablet landscape view

## 5.2.23

[View all changes from v5.2.22...v5.2.23](https://github.com/shopware/shopware/compare/v5.2.22...v5.2.23)

* Added conditional statement in `themes/Frontend/Responsive/frontend/_public/src/js/jquery.product-slider.js` to prevent the jquery plugin from sending ajax requests indefinitely
* Added `limit` parameter to `createQuery` and `createOptionQuery` in `engine/Shopware/Bundle/ESIndexingBundle/Property/PropertyQueryFactory`
* Added default `limit` of 100 in `engine/Shopware/Bundle/ESIndexingBundle/Property/PropertyIndexer::populate`
* Added a base store for `Shopware.apps.Base.model.DocType`

## 5.2.22

[View all changes from v5.2.21...v5.2.22](https://github.com/shopware/shopware/compare/v5.2.21...v5.2.22)

* Fixed the picture implementation of the `box-emotion.tpl` to load the correct image sizes
* Added new event `plugin/swAutoSubmit/onChangeSelection` in `themes/Frontend/Responsive/frontend/_public/src/js/jquery.auto-submit.js`
* Added ExtJS override `engine/Library/ExtJs/overrides/Ext.view.Table.js` to fix display of row selection in grid panel when updating the row after row editing
* Added optional parameter `appendCSRFToken`  for JSONP-Requests. The CSRF token will only be sent if the parameter is true.
* Added `src` attribute as a fallback for `srcset` to the main `<img />` tag in `themes/Frontend/Bare/frontend/detail/image.tpl` and `themes/Frontend/Bare/frontend/blog/images.tpl`

## 5.2.21

[View all changes from v5.2.20...v5.2.21](https://github.com/shopware/shopware/compare/v5.2.20...v5.2.21)

* Updated Symfony to version 2.8.17
* Added paymentID as event property in `Shopware_Modules_Admin_Execute_Risk_Rule_RuleName`
* Added support for creating new orders using the `Order` API resource
* Added option `allowHtml` for ExtJS grid columns and display form fields in order to allow unescaped html output. Default value is: `false`
* Added optional `Guzzle` client config parameter to `Shopware\Components\HttpClient\GuzzleFactory::createClient` method
* Added events `sendRequestSuccess` and `sendRequestFailure` to `_sendRequest` in `themes/Backend/ExtJs/backend/category/controller/article_mapping.js`
* Deprecated duplicate block `frontend_blog_detail_comments` in `frontend/blog/detail.tpl`, use `frontend_blog_detail_comments_count` and `frontend_blog_detail_comments_list` instead. 
* Changed CSRF validation method in `engine/Shopware/Components/CSRFTokenValidator` from session validation to cookie validation.
* Removed `invalidateToken` from `engine/Shopware/Components/CSRFTokenValidator`
* Added opt-in for CSRF GET protection. Implement `engine/Shopware/Components/CSRFTGetProtectionAware` and return the controller actons which should be protected via `getCSRFProtectedActions`.
* Added CSRF specific error message.
* Changed behaviour of plugin installer to show the correct translated label and description in plugin manager and basic settings (new 5.2 plugin system only, see [DevDocs](https://developers.shopware.com/developers-guide/plugin-system/#plugin-metadata))

## 5.2.20

[View all changes from v5.2.19...v5.2.20](https://github.com/shopware/shopware/compare/v5.2.19...v5.2.20)

* Reverted shopware/shopware#821 which added left joins for basket attributes in `sAdmin::sGetDispatchBasket()` and `sExport::sGetDispatchBasket()`

## 5.2.19

[View all changes from v5.2.18...v5.2.19](https://github.com/shopware/shopware/compare/v5.2.18...v5.2.19)

* Changed the loading of backend widgets to disable widgets of deactivated plugins
* Added new Event `Shopware_Modules_Admin_regenerateSessionId_Start` in sAdmin::regenerateSessionId
* Changed `convertCategory` method in `engine/Shopware/Core/sCategories.php` from private to public
* Added left join of `s_order_basket_attributes` in `sAdmin::sGetDispatchBasket()` and `sExport::sGetDispatchBasket()`
* Added event `blog-save-successfully` to `onSaveBlogArticle()` method in `themes/Backend/ExtJs/backend/blog/controller/blog.js`
* Added event `customer-address-save-successfully` to `onSaveCustomer()` method in `themes/Backend/ExtJs/backend/customer/controller/detail.js`
* Added event `customer-save-successfully` to  `onSaveCustomer()` method in `themes/Backend/ExtJs/backend/customer/controller/detail.js`
* Added event `site-save-successfully` to `onSaveSite()` method in `themes/Backend/ExtJs/backend/site/controller/form.js`
* Added event `supplier-save-successfully` to `onSupplierSave()` method in `themes/Backend/ExtJs/backend/supplier/controller/main.js`
* Added the possibility to add a Theme info tab. Add a folder with the name "info" to your theme folder. Add a html file to the folder with the required language iso like "en_EN.html". The HTML content of the file is the content of the tab.
* Changed internal loop variable name `positions` in `themes/Frontend/Bare/documents/index.tpl` to fix typo
* Added configuration option `ShopwarePlugins` to `plugin_directories` in the `engine/Shopware/Configs/Default.php` to make the path of the plugin system directory configurable
* Support for custom CSS files in themes added to Grunt tasks
* Added command option `shopId` for `sw:theme:cache:generate`

## 5.2.18

[View all changes from v5.2.17...v5.2.18](https://github.com/shopware/shopware/compare/v5.2.17...v5.2.18)

* Fixed invalid permissions after running media optimizer on some hosting systems
* Fixed session error in exports

## 5.2.17

[View all changes from v5.2.16...v5.2.17](https://github.com/shopware/shopware/compare/v5.2.16...v5.2.17)

* Deprecated Smarty modifier `rewrite`. Modifier will be removed in 5.3.0.
* Changed default `session.gc_divisor` to `200`. To decrease session garbage collection probability.
* Added console command `sw:session:cleanup` to cleanup expired sessions.
* Changed database field `s_core_sessions.expiry` to contain the timestamp when the session should expire, not the session lifetime.
* Changed database field `s_core_sessions_backend.expiry` to contain the timestamp when the session should expire, not the session lifetime.
* Added `$sAmountNumeric` and `$sAmountNetNumeric` to sOrder mail
* Added command `sw:media:optimize` to optimize media files without quality loss.
* Added new Smarty blocks to `documents/index.tpl`
    * `document_index_address`
    * `document_index_address_sender`
    * `document_index_address_base`
* Added `s_article_configurator_options_attributes` and `s_article_configurator_groups_attributes`
* Added new plugin config element type `button`
* Changed `\Enlight_Controller_Plugins_ViewRenderer_Bootstrap::setNoRender` resets now the view template to prevent `PostDispatchSecure` events
* Changed `\Shopware\Bundle\StoreFrontBundle\Service\Core\ManufacturerService::getList` fetch now the seo urls for each manufacturer
* Removed duplicated initialisation of `\Shopware\Bundle\StoreFrontBundle\Struct\ShopContextInterface`.
* Added `_seo` parameter for smarty url plugin which allows to prevent s_core_rewrite_url query for none seo urls
* Removed unnecessary `/widget/index/menu` call in `themes/Frontend/Bare/frontend/index/topbar-navigation.tpl` and `themes/Frontend/Bare/frontend/index/footer_minimal.tpl`. The `widgets/index/menu.tpl` template is now included directly.
* Added `\Shopware\Components\Theme\PathResolver::getDirectoryByArray` function which allows to load theme inheritances without doctrine models
* Added api resources to dependency injection container

### Media Optimizer

The service `shopware_media.optimizer_service` optimizes files using external tools. Further external tools can be implemented using the interface `Shopware\Bundle\MediaBundle\Optimizer\OptimizerInterface` and the dependency injection tag `shopware_media.optimizer`.

### Api resources
The api resources are now available in the dependency injection container using the namespace `shopware.api`. It is now possible to add your own resources as services or decorate others in your plugins `services.xml`.
```
/** Register new resource as service */
<service id="shopware.api.example" class="SwagExampleApi\Components\Api\Resource\Example" />

/** Replace existing resource service */
<service 
    id="swag_example_plugin.article_api"
    class="SwagExampleApi\Components\Api\Resource\Article"
    decorates="shopware.api.article"
    public="false"
    shared="false">
</service>
```

## 5.2.16

[View all changes from v5.2.15...v5.2.16](https://github.com/shopware/shopware/compare/v5.2.15...v5.2.16)

* Improved form input filtering

## 5.2.15

[View all changes from v5.2.14...v5.2.15](https://github.com/shopware/shopware/compare/v5.2.14...v5.2.15)

* Fixed article api resource when creating a new article with new configurator options and an image mapping for this new options
* Added cronjob registration via `Resources/cronjob.xml` file
* Removed call to `strip_tags` in inputfilter on all request parameters.
    * Please make sure untrusted input is escaped in plugins 

## 5.2.14

[View all changes from v5.2.13...v5.2.14](https://github.com/shopware/shopware/compare/v5.2.13...v5.2.14)

### Add property "valueField" to the media field.
* The shopping world element "Media field" supports now to change the value field. All possible properties you can find in the file: `themes/Backend/ExtJs/backend/media_manager/model/media.js`

 Example:
 
```php
 $emotionElement->createMediaField([
     'name' => 'preview_image',
     'fieldLabel' => 'The preview image',
     'valueField' => 'virtualPath'
 ]);
 ```

## 5.2.13

[View all changes from v5.2.12...v5.2.13](https://github.com/shopware/shopware/compare/v5.2.12...v5.2.13)

* Changed duplicate smarty block from `frontend_checkout_confirm_information_addresses_equal_panel_shipping_select_address` to `frontend_checkout_confirm_information_addresses_equal_panel_shipping_add_address` in `frontend/checkout/confirm.tpl`
* Added interface `\Shopware\Bundle\ESIndexingBundle\TextMappingInterface` which handles text field mappings for different elastic search versions
* Added the missing requirement of the php function `parse_ini_file` to the system info and the installer
* Added `Shopware\Components\Plugin\PaymentInstaller` class to install payment methods in plugins
* Changed theme path for plugins of new plugin system from `/resources` to `/Resources`
* Changed parsing of JSON `POST`ed to the REST API to not remove top-level `NULL` values
* Changed frontendsession to a locking session handler
    * Added new configuration parameter `session.locking` which is `true` by default
    * The session handler can be overwritten by replacing the `session.save_handler`-Service. A instance of `\SessionHandlerInterface` has to be returned.
* Changed return value of `sArticles::sGetArticleById()` to provide an additional text if none is given and display the cover image by default when using the selection configurator
* Changed url parameter in last seen articles to deeplink to an article variant instead of the article
* Added console command `sw:rebuild:seo:index` to rebuild the SEO index on demand

### Autoloading of plugin resources

Plugin resources inside of the `PluginName/Resources/frontend` directory are now loaded automatically on theme compilation when using the new plugin system.

Example:

- `custom/plugins/SwagResourceTest/Resources/frontend/css/**.css`
- `custom/plugins/SwagResourceTest/Resources/frontend/js/**.js`
- `custom/plugins/SwagResourceTest/Resources/frontend/less/all.less`

## 5.2.12

[View all changes from v5.2.11...v5.2.12](https://github.com/shopware/shopware/compare/v5.2.11...v5.2.12)

## 5.2.11

[View all changes from v5.2.10...v5.2.11](https://github.com/shopware/shopware/compare/v5.2.10...v5.2.11)

* Added new Smarty block `frontend_robots_txt_allows` to `frontend/robots_txt/index.tpl`
* Added new Smarty block `frontend_account_order_item_availability` to `frontend/account/order_item_details.tpl`
* Added new rule for `/widgets/emotion` to robots.txt in `frontend/robots_txt/index.tpl`
* Added new blocks in `themes/Frontend/Bare/frontend/account/index.tpl`
* If shipping address equals billing address show notice instead of same address twice in account index
* Added container tag `shopware_media.adapter` to register new media adapters
* Added interface `Shopware\Bundle\MediaBundle\Adapters\AdapterFactoryInterface` to create new adapter factories
* Removed method `Shopware\Bundle\MediaBundle\Subscriber\ServiceSubscriber::createLocalAdapter()`
* Removed method `Shopware\Bundle\MediaBundle\Subscriber\ServiceSubscriber::createFtpAdapter()`
* Deprecated collect event `Shopware_Collect_MediaAdapter_*`, use container tag `shopware_media.adapter` instead. The event will be removed in 5.4.

### Custom stores in plugin configuration

It is now possible to define custom config stores directly inside your plugin's config.xml when using the new plugin system.

A custom config store is defined like this:

```
<store>
    <option>
        <value>1</value>
        <label lang="de">Deutscher Anzeigewert</label>
        <label lang="en">English display value</label>
    </option>
    <option>
        <value>two</value>
        <label lang="de">Deutscher Anzeigewert</label>
        <label>English display value (locale en via fallback)</label>
    </option>
    <option>
        <value>3</value>
        <label>Single display value (locale en via fallback)</label>
    </option>
</store>
```

There are two unique constraints:
* Inside a store, a value tag's value must only occur once
* Inside an option tag, a label tag's lang attribute value must only occur once

Additionally, the order is fixed. The value tag must be defined before the label tag(s).

There must be at least one option tag and inside each option tag where must be at least one value and one option tag. 

## 5.2.10

[View all changes from v5.2.9...v5.2.10](https://github.com/shopware/shopware/compare/v5.2.9...v5.2.10)

* Added optional `filter` option to `Shopware.apps.Base.view.element.Select`
* Set `remoteFilter` to `true` in several *base* stores:
    * `Shopware.apps.Base.store.Country`
    * `Shopware.apps.Base.store.CountryArea`
    * `Shopware.apps.Base.store.CountryState`
    * `Shopware.apps.Base.store.Currency`
    * `Shopware.apps.Base.store.CustomerGroup`
    * `Shopware.apps.Base.store.Dispatch`
    * `Shopware.apps.Base.store.Locale`
    * `Shopware.apps.Base.store.OrderStatus`
    * `Shopware.apps.Base.store.Payment`
    * `Shopware.apps.Base.store.PaymentStatus`
    * `Shopware.apps.Base.store.PositionStatus`
    * `Shopware.apps.Base.store.Tax`
* Replaced the default filter on `dispatches.active` added in `Shopware_Controllers_Backend_Base::getDispatchesAction()` by a default filter on `active` added in `Shopware.apps.Base.store.Dispatch`
* Refactored jQuery product slider plugin for sliding infinitely
* Added `initOnEvent` option to cross selling tabs on detail page for the combination of tabs with product sliders
* Added `Shopware\Components\Emotion\ComponentInstaller` class to install emotion components in plugins.
* Added `\Shopware\Components\Emotion\EmotionComponentViewSubscriber` to register emotion widget templates 
* Added `plugin_dir` and `plugin_name` container parameter for each plugin. Parameters are prefixed by `\Shopware\Components\Plugin::getContainerPrefix`
* Deprecated parameter `$checkProxy` from `Enlight_Controller_Request_Request::getClientIp()`

## 5.2.9

[View all changes from v5.2.8...v5.2.9](https://github.com/shopware/shopware/compare/v5.2.8...v5.2.9)

* `filtergroupID` column will be set to `null` in the `s_articles` table when deleting a property set 

## 5.2.8

[View all changes from v5.2.7...v5.2.8](https://github.com/shopware/shopware/compare/v5.2.7...v5.2.8)

* Fixed a PHP 7 fatal error in the SVG rendering of mPDF
* Added missing update of the order details' order number, when converting a cancelled order to a *normal* order in `Shopware_Controllers_Backend_CanceledOrder::convertOrderAction()`
* Added creation of `Shopware\Models\Attribute\OrderDetail` upon adding a new order position in the backend
* Added missing creation of `Shopware\Models\Attribute\Order` and `Shopware\Models\Attribute\OrderDetail` instances in `sOrder::sCreateTemporaryOrder()`

## 5.2.7

[View all changes from v5.2.6...v5.2.7](https://github.com/shopware/shopware/compare/v5.2.6...v5.2.7)

* Add support for third party post messages in the backend
* getOne function of customer api resource contains now the country and state data for billing and shipping address
* Changed `jquery.search::onKeyboardNavigation()` method to provide more extension possibilities.
* Deprecated the execution shopware.php via CLI. Please use the command line tool in `bin/console` instead.

## 5.2.6

[View all changes from v5.2.5...v5.2.6](https://github.com/shopware/shopware/compare/v5.2.5...v5.2.6)

* Changed visibility of sAdmin::loginUser to protected
* Added filter events to all convert functions in `LegacyStructConverter`
* Removed unused shipping free configuration in backend country form
* Added new smarty blocks in `engine/Shopware/Plugins/Default/Frontend/AdvancedMenu/Views/frontend/advanced_menu/index.tpl`
* Add order attribute select to \Shopware\Components\Api\Resource\Order::getList query
* \Shopware\Bundle\StoreFrontBundle\Struct\ListProduct::isPriceGroupActive proofs additionally if a price group exists
* Use user ID of the API key owner for media files if none is provided
* Fixed image configurator html ids for radio boxes
* Added notifyUntil event `Shopware_Modules_Basket_BeforeAddMinimumOrderSurcharge` to `sBasket::sInsertSurcharge` containing the surcharge.
* Added notifyUntil event `Shopware_Modules_Basket_BeforeAddOrderSurchargePercent` to `sBasket::sInsertSurchargePercent` containing the surcharge.
* Added notifyUntil event `Shopware_Modules_Basket_BeforeAddOrderDiscount` to `sBasket::sInsertDiscount` containing the discount.
* Replaced `grunt-contrib-watch` with `grunt-chokidar` for the grunt watch task.
* Deprecated "{$sShopname}" variable in Forms.php, please use "{sShopname}" in your mail form templates instead.
* Added `\Shopware\Bundle\SearchBundle\SearchTermPreProcessorInterface` interface which pre filters provided search terms
* Added `ShopPage` to Storefront Bundle
* Attributes of `forms` and `shop pages` are not translatable anymore
* Added new Smarty blocks to `frontend/detail/image.tpl`
    * `frontend_detail_image_default_image_slider_item`
    * `frontend_detail_images_image_slider_item`
* Updated `ongr/elasticsearch-dsl` to version 2.0.2
* Updated `phpunit/phpunit` to version 5.5
* Removed unused smarty block `frontend_checkout_cart_item_small_quantites_tax_price` in `themes/Frontend/Bare/frontend/checkout/confirm_item.tpl`
* Added method `Enlight_Controller_Response_ResponseTestCase::sendCookies` so it's consistent with `Enlight_Controller_Response_ResponseHttp`
* Added `\Shopware\Components\DependencyInjection\Compiler\TagReplaceTrait` class which centralized service constructor replacements with prioritized tagged services

## 5.2.5

[View all changes from v5.2.4...v5.2.5](https://github.com/shopware/shopware/compare/v5.2.4...v5.2.5)

* Fixed SEO URL generation for URLs containing dots and forward slashes

## 5.2.4

[View all changes from v5.2.3...v5.2.4](https://github.com/shopware/shopware/compare/v5.2.3...v5.2.4)

* Introduced new interface `Shopware\Components\Slug\SlugInterface` to generate URL safe versions of a string
    * Service id `shopware.slug`
    * The default implementation delegates to [`cocur/slugify`](https://github.com/cocur/slugify)
    * SEO url generation now uses this new service to rewrite urls
* Added new media file type for 3D model files. Supporting following files in the media manager: .dae, .obj, .fbx, .spx, .3ds, .3mf, .blend, .awd, .ply, .pcd, .stl, .skp
* `\Shopware\Bundle\AttributeBundle\CrudService::unifiedToSql()` now returns SQL type mapped to `string` if a given type is not mapped
* Changed http response code to `400` for CSRF exceptions
* Added `is--active` class to wishlist entry in the account sidebar
* Added interface `Shopware\Bundle\ESIndexingBundle\Product\ProductQueryFactoryInterface` and implemented it in its implementations
* Removed class `Shopware_Components_Check_System`. Use `Shopware\Components\Check\Requirements` instead (Service Id: `shopware.requirements`)
* Added mixin `.clear-form-button()` to remove the default browser styling of form buttons
* Changed action links which modify data to use forms with HTTP `POST`. This affects the following templates and plugins:
    * `themes/Frontend/Bare/frontend/checkout/items/premium-product.tpl`
    * `themes/Frontend/Bare/frontend/checkout/items/product.tpl`
    * `themes/Frontend/Bare/frontend/checkout/items/voucher.tpl`
    * `themes/Frontend/Bare/frontend/checkout/ajax_cart_item.tpl`
    * `themes/Frontend/Bare/frontend/compare/index.tpl`
    * `themes/Frontend/Bare/frontend/detail/actions.tpl`
    * `themes/Frontend/Bare/frontend/listing/product-box/product-actions.tpl`
    * `themes/Frontend/Bare/frontend/note/item.tpl`
    * `themes/Frontend/Responsive/frontend/_public/src/js/jquery.collapse-cart.js`
    * `themes/Frontend/Responsive/frontend/_public/src/js/jquery.product-compare-add.js`
    * `themes/Frontend/Responsive/frontend/_public/src/js/jquery.product-compare-menu.js`
* Added event `Shopware_SearchBundle_Create_Base_Criteria` in `Shopware\Bundle\SearchBundle\StoreFrontCriteriaFactory::createBaseCriteria()`
* Changed visiblility of service `snippet_resource` to public in DI Container
* Added JS and LESS directory path of new plugin system to gruntfile
* Deprecated css class `icon--brogress-1`, use `icon--progress-1` instead
* Updated [CodeMirror](https://github.com/codemirror/CodeMirror) to version 5.17.0
* Improved mode support for CodeMirror element
* Allow uploading file when creating `media` using the REST API
* Increased max length of `s_emarketing_banners.img` and `s_articles_supplier.img` to 255
* Added filter events for editing the collection of LESS and JS files before compiling
    * `Theme_Compiler_Collect_Less_Definitions_FilterResult`
    * `Theme_Compiler_Collect_Javascript_Files_FilterResult`
* Removed synchronizing of plugin information column `changes`
* Allow root menu elements for plugins. Added attribute `isRootMenu` in `menu.xml` Example: `<entry isRootMenu="true">`
* Normalized the return value of `Album\Settings` getThumbnailSize to return a empty array instead of a array with an empty string when no size is active

## 5.2.3

[View all changes from v5.2.2...v5.2.3](https://github.com/shopware/shopware/compare/v5.2.2...v5.2.3)

* Updated `guzzlehttp/guzzle` to version 5.3.1 to mitigate [httproxy](https://httpoxy.org/) vulnerability
* Set timeouts from install/update/(secure) uninstall operations in plugin manager to 300 seconds
* Fix countries rest api response data and header
* Added exception to Shopware updater if `php-curl` is missing
* Add support for integer and array values to the `sw:plugin:config:set` cli command
* Deprecated the `$strong` optional parameter from the following methods, as the component ensures a cryptographically secure pseudo-random number generator is always used since Shopware 5.2.0
    * `Shopware\Components\Random::getBytes()`
    * `Shopware\Components\Random::getBoolean()`
    * `Shopware\Components\Random::getInteger()`
    * `Shopware\Components\Random::getFloat()`
    * `Shopware\Components\Random::getString()`
    * `Shopware\Components\Random::getAlphanumericString()`

## 5.2.2 (2016-07-13)

[View all changes from v5.2.0...v5.2.2](https://github.com/shopware/shopware/compare/v5.2.0...v5.2.2)

* Add support for Symfony `console.command` service tag to register commands directly inside service container

## 5.2.0 (2016-07-01)

[View all changes from v5.1.6...v5.2.0](https://github.com/shopware/shopware/compare/v5.1.6...v5.2.0)

* Increased minimum required PHP version to PHP >= 5.6.4.
* Added CSRF protection to frontend and backend which is enabled by default.
    * OptOut by implementing `Shopware\Components\CSRFWhitelistAware` interface
    * Added `X-CSRF-Token` to every ajax request
    * Added `__csrf_token` to every html form in frontend
    * Added `__csrf_token` param to every ExtJS form submit via override in `ExtJs/overrides/Ext.form.Base.js`
    * Added `csrfProtection` config options to disable CSRF protection
    * Special thanks to: [ltepner](https://github.com/ltepner)
    * See: https://developers.shopware.com/developers-guide/csrf-protection/
* Updated Symfony Components to version 2.8 LTS
* Replaced polyfill provided by `indigophp/hash-compat` with `symfony/polyfill-php56`
* Added polyfill for `random_bytes()` and `random_int()` via `paragonie/random_compat`
* Removed `client_check` and `referer_check` from the config in favor of the CSRF protection.
* Removed session variables `__SW_REFERER` and `__SW_CLIENT`
* Added AdvancedMenu feature to configure menu opening delay on mouse hover
* Added the ability to add custom CSS classes to emotion elements in the backend.
    * Multiple classnames can be added by separating them with whitespaces.
    * Added new `css_class` column to the `s_emotion_elements` table.
* Removed deprecated columns `s_filter_values.value_numeric` and `s_filter_options.default`
* Updated `monolog/monolog` to version 1.17.2
* Added HTML code widget for the shopping worlds which lets the user enter actual Smarty & JavaScript code which will be included like it is
    * The Smarty code has access to all globally available Smarty variables
* Added the following fields to status emails:
    * `billing_additional_address_line1`
    * `billing_additional_address_line2`
    * `shipping_additional_address_line1`
    * `shipping_additional_address_line2`
* Replaced `bower` with `npm` to manage the frontend dependencies
    * The dependencies can now be installed using the command: `npm install && npm run build`
    * Removed the file `vendors/less/open-sans-fontface/open-sans.less`. It's now located under `public/src/less/_components/fonts.less`
* Deprecated `Shopware_Bootstrap` and `Enlight_Bootstrap` commonly accesed by `Shopware()->Bootstrap()`.
* Removed deprecated methods and variables:
    * `sArticle.sVoteAverange` in product listings
    * `sNote.sVoteAverange` in note listing
    * `blog.media.path`
    * Removed methods Shopware\Models\Menu\Repository::addItem() and Shopware\Models\Menu\Repository::save()
    * `file` property of banner mappings
    * Removed method sOrder::sManageEsdOrder()
    * `sBanner.img` variable
    * emotion category teaser `image` property
* Removed the following events:
    * `sArticles::sGetCheapestPrice::replace`
    * `sArticles::sGetCheapestPrice::after`
    * `sArticles::sCalculatingPrice::replace`
    * `sArticles::sCalculatingPrice::replace`
    * `sArticles::getArticleListingCover::replace`
    * `sArticles::getArticleListingCover::after`
    * `sArticles::calculateCheapestBasePriceData::replace`
    * `sArticles::calculateCheapestBasePriceData::after`
    * `sArticles::sGetArticleProperties::replace`
    * `sArticles::sGetArticleProperties::after`
    * `sArticles::sGetArticlePictures::replace`
    * `sArticles::sGetArticlePictures::after`
    * `sArticles::sGetPricegroupDiscount::replace`
    * `sArticles::sGetPricegroupDiscount::after`
    * `sArticles::sGetUnit::replace`
    * `sArticles::sGetUnit::after`
    * `sArticles::sGetArticlesAverangeVote::replace`
    * `sArticles::sGetArticlesAverangeVote::after`
    * `sArticles::sGetArticlesVotes::replace`
    * `sArticles::sGetArticlesVotes::after`
    * `Shopware_Modules_Articles_GetPromotionById_FilterResult`
    * `Shopware_Modules_Articles_GetArticleById_FilterArticle`
* The following article arrays are now indexed by their order number
    * top seller
    * emotion slider data
    * recommendation data (also bought and also viewed)
    * similar and related articles
* Removed deprecated table `s_user_debit`
    * `\Shopware\Models\Customer\Customer::$debit`
    * `\Shopware\Models\Customer\Customer::getDebit()`
    * `\Shopware\Models\Customer\Customer::setDebit()`
* Added new configuration field to the emotion banner widget for link target.
* Added composer dependency for Symfony Form and implemented FormBundle
* Changed constructor of `\Shopware\Components\Theme\PathResolver`
* Changed constructor of `\Shopware_Components_Snippet_Manager`
* Changed constructor of `\Shopware\Bundle\PluginInstallerBundle\Service\DownloadService`
* Changed signature of `Shopware\Bundle\SearchBundleDBAL\PriceHelperInterface::getSelection`, now expects `ProductContextInterface` instead of `ShopContextInterface`
* Changed signature of `Shopware\Bundle\SearchBundleDBAL\PriceHelper::getSelection` to match changed interface, now expects `ProductContextInterface` instead of `ShopContextInterface`
* Changed signature of `Shopware\Bundle\StoreFrontBundle\Service\CheapestPriceServiceInterface::getList`, now expects `ProductContextInterface` instead of `ShopContextInterface`
* Changed signature of `Shopware\Bundle\StoreFrontBundle\Service\CheapestPriceServiceInterface::get`, now expects `ProductContextInterface` instead of `ShopContextInterface` and `ListProduct` instead of `BaseProduct`
* Changed signature of `Shopware\Bundle\StoreFrontBundle\Service\Core\CheapestPriceService::getList` to match changed interface, now expects `ProductContextInterface` instead of `ShopContextInterface`
* Changed signature of `Shopware\Bundle\StoreFrontBundle\Service\Core\CheapestPriceService::get` to match changed interface, now expects `ProductContextInterface` instead of `ShopContextInterface` and `ListProduct` instead of `BaseProduct`
* Deprecated methods now use `trigger_error` of type `E_USER_DEPRECATED`
* Changed default error_reporting to `E_ALL & ~E_USER_DEPRECATED`
* Deprecated Class `Enlight_Application`
* Deprecated `Enlight_Application::Instance()` and `Enlight()`, use `Shopware()` instead
* Deprecated `Shopware\Kernel::getShopware()`
* Deprecated `Shopware::App()` / `Shopware()->App()`
* Deprecated `Shopware::Environment()` / `Shopware()->Environment()`
* Deprecated `Shopware::OldPath()` / `Shopware()->OldPath()`
* Deprecated `Shopware::setEventManager()` / `Shopware()->setEventManager()`
* Deprecated `Enlight_Application::CorePath()` / `Shopware()->CorePath()`
* Deprecated `Enlight_Application::Path()` / `Shopware()->Path()`
* Deprecated `Enlight_Application::ComponentsPath()` / `Shopware()->ComponentsPath()`
* Deprecated `Enlight_Application::DS()`
* Removed `Enlight_Application::setOptions()`
* Removed `Enlight_Application::getOptions()`
* Removed `Enlight_Application::getOption()`
* Removed `Enlight_Application::setPhpSettings()`
* Removed `Enlight_Application::setIncludePaths()`
* Removed `Enlight_Application::__callStatic()`
* Removed the following models
    * `Shopware.apps.Customer.view.detail.Billing`
    * `Shopware.apps.Customer.view.detail.Shipping`
* Removed fax field form billing addresses
* Updated `ongr/elasticsearch-dsl` to v2.0.0, see https://github.com/ongr-io/ElasticsearchDSL/blob/master/CHANGELOG.md#v200-2016-03-03 for BC breaks.
* Renamed block 'frontend_blog_bookmarks_deliciosus' to 'frontend_blog_bookmarks_delicious'
* Deprecated `\Shopware\Models\Article\Element`
* Removed the following templates including their snippets and blocks
    * `frontend/account/billing.tpl`
    * `frontend/account/billing_checkout.tpl`
    * `frontend/account/content_right.tpl`
    * `frontend/account/select_address.tpl`
    * `frontend/account/select_billing.tpl`
    * `frontend/account/select_billing_checkout.tpl`
    * `frontend/account/select_shipping.tpl`
    * `frontend/account/select_shipping_checkout.tpl`
    * `frontend/account/shipping.tpl`
    * `frontend/account/shipping_checkout.tpl`
    * `frontend/checkout/cart_left.tpl`
    * `frontend/checkout/confirm_left.tpl`
* Removed `sAdmin::sGetPreviousAddresses()`
* Removed `sAdmin::sUpdateBilling()`
* Removed `sAdmin::sUpdateShipping()`
* Removed `sAdmin::sValidateStep1()`
* Removed `sAdmin::sValidateStep2()`
* Removed `sAdmin::sValidateStep2ShippingAddress()`
* Removed `billingAction()` in `Controllers/Frontend/Account.php`
* Removed `shippingAction()` in `Controllers/Frontend/Account.php`
* Removed `saveBillingAction()` in `Controllers/Frontend/Account.php`
* Removed `saveShippingAction()` in `Controllers/Frontend/Account.php`
* Removed `selectBillingAction()` in `Controllers/Frontend/Account.php`
* Removed `selectShippingAction()` in `Controllers/Frontend/Account.php`
* Moved block `frontend_checkout_confirm_left_billing_address` outside panel body
* Moved block `frontend_checkout_confirm_left_shipping_address` outside panel body
* Removed block `frontend_checkout_finish_info`, use `frontend_checkout_finish_information_wrapper` instead
* Removed the following backend models including their smarty blocks
    * `Shopware.apps.Supplier.model.Attribute`
    * `Shopware.apps.Customer.model.BillingAttributes`
    * `Shopware.apps.Customer.model.ShippingAttributes`
    * `Shopware.apps.Customer.model.Attribute`
    * `Shopware.apps.Blog.model.Attribute`
    * `Shopware.apps.Form.model.Attribute`
    * `Shopware.apps.MediaManager.model.Attribute`
    * `Shopware.apps.Property.model.Attribute`
    * `Shopware.apps.Config.model.form.Attribute`
    * `Shopware.apps.Voucher.model.Attribute`
    * `Shopware.apps.Emotion.model.Attribute`
    * `Shopware.apps.Banner.model.Attribute`
    * `Shopware.apps.Order.model.Attribute`
    * `Shopware.apps.Order.model.BillingAttribute`
    * `Shopware.apps.Order.model.PositionAttribute`
    * `Shopware.apps.Order.model.ReceiptAttribute`
    * `Shopware.apps.Order.model.ShippingAttribute`
    * `Shopware.apps.Category.model.Attribute`
    * `Shopware.apps.Mail.model.Attribute`
    * `Shopware.apps.Payment.model.Attribute`
    * `Shopware.apps.Shipping.model.Attribute`
    * `Shopware.apps.Site.model.Attribute`
    * `Shopware.apps.UserManager.model.Attribute`
* The following repository methods no longer select attributes or have been removed entirely
    * `\Shopware\Models\Article\Repository::getSupplierQueryBuilder()`
    * `\Shopware\Models\Customer\Repository::getCustomerDetailQueryBuilder()`
    * `\Shopware\Models\Customer\Repository::getShippingAttributesQuery()`
    * `\Shopware\Models\Customer\Repository::getShippingAttributesQueryBuilder()`
    * `\Shopware\Models\Customer\Repository::getBillingAttributesQuery()`
    * `\Shopware\Models\Customer\Repository::getBillingAttributesQueryBuilder()`
    * `\Shopware\Models\Customer\Repository::getAttributesQuery()`
    * `\Shopware\Models\Customer\Repository::getAttributesQueryBuilder()`
    * `\Shopware\Models\Blog\Repository::getBackedDetailQueryBuilder()`
    * `\Shopware\Models\Emotion\Repository::getEmotionDetailQueryBuilder()`
    * `\Shopware\Models\ProductFeed\Repository::getDetailQueryBuilder()`
    * `\Shopware\Models\Banner\Repository::getBannerMainQuery()`
    * `\Shopware\Models\Order\Repository::getBackendOrdersQueryBuilder()`
    * `\Shopware\Models\Order\Repository::getBackendAdditionalOrderDataQuery()`
* Removed attribute associations from the following backend models
    * `Shopware.apps.Supplier.model.Supplier`
    * `Shopware.apps.Customer.model.Customer`
    * `Shopware.apps.Blog.model.Detail`
    * `Shopware.apps.Form.model.Form`
    * `Shopware.apps.Property.model.Set`
    * `Shopware.apps.MediaManager.model.Media`
    * `Shopware.apps.Emotion.model.Emotion`
    * `Shopware.apps.Config.model.form.Country`
    * `Shopware.apps.Banner.model.BannerDetail`
    * `Shopware.apps.Voucher.model.Detail`
    * `Shopware.apps.Order.model.Receipt`
    * `Shopware.apps.Order.model.Position`
    * `Shopware.apps.Order.model.Order`
    * `Shopware.apps.Category.model.Detail`
    * `Shopware.apps.Customer.model.Customer`
    * `Shopware.apps.Payment.model.Payment`
    * `Shopware.apps.Shipping.model.Dispatch`
    * `Shopware.apps.Site.model.Nodes`
    * `Shopware.apps.UserManager.model.User`
    * `Shopware.apps.UserManager.model.UserDetail`
* Removed the following backend files:
    * `themes/Backend/ExtJs/backend/blog/view/blog/detail/sidebar/attributes.js`
    * `themes/Backend/ExtJs/backend/config/store/form/attribute.js`
    * `themes/Backend/ExtJs/backend/config/view/form/attribute.js`
    * `themes/Backend/ExtJs/backend/config/model/form/attribute.js`
* Changed position of `Shopware.apps.Customer.view.detail.Billing` fields
* Changed position of `Shopware.apps.Customer.view.detail.Shipping` fields
* Fixed Shopware.form.plugin.Translation, the plugin can now be used in multiple forms at the same time.
    * Removed `clear`, `onOpenTranslationWindow`, `getFieldValues` and `onGetTranslatableFields` function
* `\Shopware\Bundle\StoreFrontBundle\Gateway\GraduatedPricesGatewayInterface` requires now a provided `ShopContextInterface`
* Categories of `Shopware\Components\Api\Resource\Article::getArticleCategories($articleId)` are no longer indexed by category id
* Moved `<form>` element in checkout confirm outside the agreement box to wrap around address and payment boxes
* Removed smarty variable `sCategoryInfo` in listing and blog controllers. Use `sCategoryContent` instead.
* Added creation of custom `__construct()` method to `Shopware\Components\Model\Generator`, which initializes any default values of properties when generating attribute models
* Removed `sAdmin::sUpdateAccount()`
* Removed `saveAccount()` in `Controllers/Frontend/Account.php`
* Moved field `birthday` from billing address to customer
* Added validation of order number to `Shopware\Components\Api\Resource\Variant::prepareData()` to respond with meaningful error message for duplicate order numbers
* Added service `shopware.number_range_manager` for safely retrieving the next number of a number range (`s_order_number`)
* Changed the following methods to use the `shopware.number_range_manager` service for retrieving the next number of a range:
    * `sAdmin::assignCustomerNumber()`
    * `sOrder::sGetOrderNumber()`
    * `Shopware_Components_Document::saveDocument()`
* HttpCache: Added possibility to add multiple, comma separated proxy URLs
* API cache endpoint: Changed batchDelete in a way, that multiple cache types can be invalidated
* Removed `landingPageTeaser` and `landingPageBlock` fields from emotion shopping worlds.
* Removed unnecessary method `getCampaignByCategoryQuery()` from `Models/Emotion/Repository.php`.
* Removed template blocks for campaign boxes corresponding to the removed emotion fields.
    * `frontend_index_left_campaigns_top`
    * `frontend_index_left_campaigns_middle`
    * `frontend_index_left_campaigns_bottom`
    * `frontend_blog_index_campaign_top`
    * `frontend_blog_index_campaign_middle`
    * `frontend_blog_index_campaign_bottom`
* Removed unnecessary template file for campaign boxes `frontend/campaign/box.tpl`.
* Removed third party jQuery plugin dependency `masonry`.
* Deprecated `initMasonryGrid` method and `plugin/swEmotion/onInitMasonryGrid` event in `jquery.emotion.js`
* Removed shopping world mode `masonry`. The fallback is the new mode `fluid`.
* Replaced old LESS mixin `createColumnSizes` for new grid mixins `createGrid` and `createColumns` in `_components/emotion.less`.
* Added new blocks to `widgets/emotion/index.tpl` for better overriding of the configuration.
    * `widgets/emotion/index/config`
    * `widgets/emotion/index/attributes`
    * `widgets/emotion/index/element/config`
* Changed markup and styling on checkout confirm and finish page
* Support arbitrary namespaces for doctrine entities instead of the `Shopware\CustomModels` namespace.
* Deprecated `Shopware()->Models()->__call()`
* Removed unused database fields `s_core_config_elements.filters`, `s_core_config_elements.validators`, `s_core_config_forms.scope`
* Removed deprecated `\Shopware\Models\Menu\Repository::save()` and `\Shopware\Models\Menu\Repository::addItem()`
* Removed event `Shopware_Modules_Order_SaveOrderAttributes_FilterSQL`
* Removed event `Shopware_Modules_Order_SaveOrderAttributes_FilterDetailsSQL`
* Removed event `Shopware_Modules_Order_SaveBillingAttributes_FilterSQL`
* Removed event `Shopware_Modules_Order_SaveBillingAttributes_FilterArray`
* Removed event `Shopware_Modules_Admin_SaveRegisterShippingAttributes_FilterSql`
* Removed event `Shopware_Modules_Admin_SaveRegisterShippingAttributes_Return`
* Removed event `Shopware_Modules_Admin_SaveRegisterBillingAttributes_FilterSql`
* Removed event `Shopware_Modules_Admin_SaveRegisterBillingAttributes_Return`
* Removed event `Shopware_Modules_Admin_SaveRegisterMainDataAttributes_FilterSql`
* Removed event `Shopware_Modules_Admin_SaveRegisterMainDataAttributes_Return`
* The filter event `Shopware_Modules_Order_SaveBilling_FilterArray` now contains an associative array instead of one with numeric keys.
* The filter event `Shopware_Modules_Order_SaveBilling_FilterSQL` now uses named parameters in the query instead of question marks.
* The filter event `Shopware_Modules_Order_SaveShipping_FilterArray` now contains an associative array instead of one with numeric keys.
* The filter event `Shopware_Modules_Order_SaveShipping_FilterSQL` now uses named parameters in the query instead of question marks.
* Moved `s_articles_prices.baseprice` to `s_articles_details.purchaseprice`
    * Added new database field `s_articles_details.purchaseprice`.
    * Added property `purchasePrice` to `Shopware\Models\Article\Detail`.
    * Removed property `basePrice` of `Shopware\Models\Article\Price`.
    * Removed methods `Shopware\Models\Article\Price::getBasePrice()` and `Shopware\Models\Article\Price::setBasePrice()`.
    * Deprecated database field `s_articles_prices.baseprice`. All data is left intact but this field is not used in shopware anymore and will be dropped in a future version.
    * Removed property `basePrice` of `Shopware\Models\Article\Configurator\Template\Price`.
    * Removed database field `s_article_configurator_template_prices.baseprice`.
* Removed unused class `Shopware_Components_Menu_Item` and `Shopware_Components_Menu_SaveHandler_DbTable`
* Removed database fields
    * `s_core_menu.hyperlink`
    * `s_core_menu.style`
    * `s_core_menu.resourceID`
* Removed method `Shopware\Models\Menu\Menu::setStyle()` and `Shopware\Models\Menu\Menu::getStyle()`
* Removed class `Shopware_Models_Payment`
* Removed class `Shopware_Models_PaymentManager`
* Removed `Shopware_Plugins_Frontend_Payment_Bootstrap`, Service: `Shopware()->Payments()`
* Removed following methods:
    * \Shopware_Controllers_Frontend_Register::saveRegister
    * \Shopware_Controllers_Frontend_Register::personalAction
    * \Shopware_Controllers_Frontend_Register::savePersonalAction
    * \Shopware_Controllers_Frontend_Register::billingAction
    * \Shopware_Controllers_Frontend_Register::saveBillingAction
    * \Shopware_Controllers_Frontend_Register::shippingAction
    * \Shopware_Controllers_Frontend_Register::saveShippingAction
    * \Shopware_Controllers_Frontend_Register::paymentAction
    * \Shopware_Controllers_Frontend_Register::savePaymentAction
    * \Shopware_Controllers_Frontend_Register::validatePersonal
    * \Shopware_Controllers_Frontend_Register::setRegisterData
    * \Shopware_Controllers_Frontend_Register::validateBilling
    * \Shopware_Controllers_Frontend_Register::validateShipping
    * \Shopware_Controllers_Frontend_Register::validatePayment
    * \sAdmin::sSaveRegisterMainData
    * \sAdmin::sSaveRegisterNewsletter
    * \sAdmin::sSaveRegisterBilling
    * \sAdmin::sSaveRegisterShipping
    * \sAdmin::sSaveRegister
    * \sAdmin::validateRegistrationFields
    * \sAdmin::assignCustomerNumber
    * \sAdmin::logRegistrationMailException
* Removed the following events:
    * Shopware_Modules_Admin_SaveRegisterMainData_FilterSql
    * Shopware_Modules_Admin_SaveRegisterMainData_Return
    * Shopware_Modules_Admin_SaveRegisterMainData_Return
    * Shopware_Modules_Admin_SaveRegisterBilling_FilterSql
    * Shopware_Modules_Admin_SaveRegisterBilling_Return
    * Shopware_Modules_Admin_SaveRegisterShipping_FilterSql
    * Shopware_Modules_Admin_SaveRegisterShipping_Return
    * Shopware_Modules_Admin_SaveRegister_Start
    * Shopware_Modules_Admin_SaveRegister_GetCustomerNumber
    * Shopware_Modules_Admin_SaveRegister_FilterNeededFields
    * Shopware_Modules_Admin_SaveRegister_FilterErrors
* Shopware_Modules_Admin_SaveRegister_Successful contains no more subject
* Changed following registration templates
    * frontend/register/index.tpl
    * frontend/register/shipping_fieldset.tpl
    * frontend/register/personal_fieldset.tpl
    * frontend/register/error_messages.tpl
    * frontend/register/billing_fieldset.tpl
* Moved s_user_billingaddress.customernumber to s_user table
* Removed \Shopware\Models\Customer\Billing::number property
* Removed method `Shopware\Bundle\PluginInstallerBundle\Service\InstallerService::getPluginBootstrap()`
* Changed Shopware\Components\Model\ModelManager::addAttribute() to allow using empty string and boolean as default value when adding attribute fields
* Removed s_categories.noviewselect
* Removed \Shopware\Models\Category\Category::$noViewSelect
* Removed \Shopware\Bundle\StoreFrontBundle\Struct\Category::$allowViewSelect
* Include the departments, salutations, cities and countries in the address comparison of the backend order details
* Display the departments in the backend order details overview
* Added new API resource 'Country' and respective REST API controller 'countries'
* Renamed input fields in `themes/Frontend/Bare/frontend/account/reset_password.tpl` with surrounding `password[]`
* Removed method `\Shopware_Controllers_Frontend_Account::validatePasswordResetForm()`
* Removed method `\Shopware_Controllers_Frontend_Account::resetPassword()`
* Added new shopping world type `rows` which is based on single rows.
* Changed structure of `billing` and `shipping` to `\Shopware\Models\Customer\Address` in `\Shopware\Components\Api\Resource\Customer`
* Replaced `buttons` with a toolbar in `dockedItems` in `Shopware.apps.Order.view.detail.Detail`
* Removed method `createButtons()` in `Shopware.apps.Order.view.detail.Detail`
* Fixed \Shopware\Bundle\SearchBundleES\ConditionHandler\VoteAverageConditionHandler vote average value
* Fixed \Shopware\Bundle\SearchBundleES\SortingHandler\ReleaseDateSortingHandler field usage
* Fixed \Shopware\Bundle\SearchBundleES\ConditionHandler\ProductAttributeConditionHandler null value handling, not null handling and string operations.
* Added attributes.core mapping in \Shopware\Bundle\ESIndexingBundle\Product\ProductMapping
* Fixed attribute assignment in \Shopware\Bundle\SearchBundleDBAL\ProductNumberSearch
* Added all source values as attributes of each product in \Shopware\Bundle\SearchBundleES\ProductNumberSearch
* Added unified product slider template
    * Created template files
        * `themes/Frontend/Bare/frontend/_includes/product_slider.tpl`
        * `themes/Frontend/Bare/frontend/_includes/product_slider_item.tpl`
        * `themes/Frontend/Bare/frontend/_includes/product_slider_items.tpl`
    * Created template blocks
        * `frontend_common_product_slider_config`
        * `frontend_common_product_slider_component`
        * `frontend_common_product_slider_container`
        * `frontend_common_product_slider_items`
        * `frontend_common_product_slider_item_config`
        * `frontend_common_product_slider_item`
    * Removed template blocks
        * `checkout_ajax_add_cross_slider_item`
        * `frontend_detail_index_streams_slider_container`
        * `frontend_detail_index_similar_slider_item`
        * `widget_emotion_component_product_slider`
        * `widgets_listing_top_seller_slider_container`
        * `widgets_listing_top_seller_slider_container_inner`
        * `widgets_listing_top_seller_slider_container_include`
        * `frontend_detail_index_also_bought_slider_inner`
        * `frontend_detail_index_similar_viewed_slider_inner`
        * `frontend_widgets_slide_articles_item`
    * Removed template files
        * `themes/Frontend/Bare/widgets/emotion/slide_articles.tpl`
* Removed customer options in import export module which results in the removal of
    * Properties
        * `\Shopware_Controllers_Backend_ImportExport::$customerRepository`
    * Methods
        * `\Shopware_Controllers_Backend_ImportExport::getCustomerRepository()`
        * `\Shopware_Controllers_Backend_ImportExport::exportCustomersAction()`
        * `\Shopware_Controllers_Backend_ImportExport::importCustomers()`
        * `\Shopware_Controllers_Backend_ImportExport::saveCustomer()`
        * `\Shopware_Controllers_Backend_ImportExport::prepareCustomerData()`
* Removed unused controller endpoints `ajax_login` and `ajax_logout` in `themes/Frontend/Bare/frontend/index/index.tpl`
* \Shopware\Bundle\SearchBundleES\ConditionHandler\ProductAttributeConditionHandler requires now the \Shopware\Bundle\AttributeBundle\Service\CrudService as constructor dependency
* Merged \Shopware\Bundle\AttributeBundle\Service\CrudService create and update function
* Removed `$basket` from `sAdmin::sManageRisks($paymentID, $basket, $user)`
* Added new `\Shopware\Bundle\StoreFrontBundle\Service\VariantCoverServiceInterface` which allows to load variant covers without considering `forceMainImageInListing` parameter
* Removed wrong parameter usage of `Shopware\Models\Menu\Repository::findOneBy`, which allows to provide two strings as criteria instead of array.
* Updated composer dependency elasticsearch/elasticsearch to version 2.2.0
* Changed default labelWidth for emotion component fields in `Shopware.apps.Emotion.view.components.Base` to 170 pixels
* IonCube Loader version requirement bumped to 5.0 or higher
* PHP setting `display_errors` defaults to `off` now in `engine/Shopware/Configs/Default.php`
* Removed `\Shopware\Bundle\StoreFrontBundle\Struct\Context` class
* Deprecated following classes and functions:
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::getContext`
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::getProductContext`
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::getLocationContext`
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::initializeContext`
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::initializeLocationContext`
    * `\Shopware\Bundle\StoreFrontBundle\Service\ContextServiceInterface::initializeProductContext`
    * `\Shopware\Bundle\StoreFrontBundle\Struct\LocationContext`
    * `\Shopware\Bundle\StoreFrontBundle\Struct\ProductContext`
    * `\Shopware\Bundle\StoreFrontBundle\Struct\LocationContextInterface`
    * `\Shopware\Bundle\StoreFrontBundle\Struct\ProductContextInterface`
* Added support for loading a new store instance by ID in the config combo box `Shopware.apps.Config.view.element.Select`
* Added attributes to interface `Enlight_Controller_Request_Request`. New methods:
    * `Enlight_Controller_Request_Request::getAttributes()`
    * `Enlight_Controller_Request_Request::getAttribute()`
    * `Enlight_Controller_Request_Request::setAttribute()`
    * `Enlight_Controller_Request_Request::unsetAttribute()`
* Fixed tax free for company configuration. If the delivery country contains the flag `taxfree_ustid`, the vat id of the shipping address is checked.
